1. Field of the Invention
The invention generally relates to complementary code decoders, and in particular to data communications receivers such as WLAN (Wireless Local Area Network) receivers comprising such decoders.
2. Description of the Related Art
A wireless local area network is a flexible data communications system implemented as an extension to or as an alternative for, a wired LAN. Using radio frequency or infrared technology, wireless LANs transmit and receive data over the air, minimizing the need for wired connections. Thus, wireless LANs combine data connectivity with user mobility.
Most WLAN systems use spread spectrum technology, a wide-band radio frequency technique developed for use in reliable and secure communication systems. The spread spectrum technology is designed to trade-off bandwidth efficiency for reliability, integrity and security. Two types of spread spectrum radio systems are frequently used: frequency hopping and direct sequence systems.
The standard defining and governing wireless local area networks that operate in the 2.4 GHz spectrum, is the IEEE 802.11 standard. To allow higher data rate transmissions, the standard was extended to the 802.11b standard that allows data rates of 5.5 and 11 Mbps in the 2.4 GHz spectrum. This extension is backwards compatible as far as it relates to direct sequence spread spectrum technology, but it adopts a new modulation technique called CCK (Complementary Code Keying) which allows for realizing the speed increase.
Complementary codes, also referred to as binary complementary sequences or series, may generally be defined as codes that comprise a pair of sequences of equal finite length, having the property that the number of pairs of like elements with any given separation in one series is equal to the number of pairs of unlike elements with the same separation in the other series. This leads to some symmetry resulting in a periodic autocorrelative vector sum being zero everywhere except at the zero shift.
A binary complementary code is a subset of the more general class of codes known as polyphase codes. A polyphase complementary code is a sequence having complementary properties, and being made of elements that have phase parameters. More specifically, such elements are e. g. members of a set of complex numbers {1, −j, −1, j} with j2=−1.
CCK uses the complex set of Walsh/Hadamard functions as complementary codes. The Walsh codes can be formed by a successive folding operation, and they may be considered to be a block code which translates (at full rate) a sequence of bits di into a codeword C of complex chips ci. In the CCK-11 case, i. e. where a data rate of 11 Mbps is used, the number of bits di and the number of chips ci are eight. At 5.5 Mbps, the number of bits di is four and the number of chips ci is eight. The following equation represents the eight complex chip values for the CCK code set, with the phase variable being QPSK (Quadrature Phase Shift Keying) phases:
  C  =            [                                                  c              0                                                                          c              1                                                                          c              2                                                                          -                              c                3                                                                                        c              4                                                                          c              5                                                                          -                              c                6                                                                                        c              7                                          ]        =          [                                                  exp              ⁡                              (                                  j                  ⁡                                      (                                                                  φ                        1                                            +                                              φ                        2                                            +                                              φ                        3                                            +                                              φ                        4                                                              )                                                  )                                                                                        exp              ⁡                              (                                  j                  ⁡                                      (                                                                  φ                        1                                            +                                              φ                        3                                            +                                              φ                        4                                                              )                                                  )                                                                                        exp              ⁡                              (                                  j                  ⁡                                      (                                                                  φ                        1                                            +                                              φ                        2                                            +                                              φ                        4                                                              )                                                  )                                                                                        exp              ⁡                              (                                  j                  ⁡                                      (                                                                  φ                        1                                            +                                              φ                        4                                                              )                                                  )                                                                                        exp              ⁡                              (                                  j                  ⁡                                      (                                                                  φ                        1                                            +                                              φ                        2                                            +                                              φ                        3                                                              )                                                  )                                                                                        exp              ⁡                              (                                  j                  ⁡                                      (                                                                  φ                        1                                            +                                              φ                        3                                                              )                                                  )                                                                                        exp              ⁡                              (                                  j                  ⁡                                      (                                                                  φ                        1                                            +                                              φ                        2                                                              )                                                  )                                                                                        exp              ⁡                              (                                  j                  ⁡                                      (                                          φ                      1                                        )                                                  )                                                        ]      
The variables φ1, φ2, φ3 and φ4 are complex QPSK phasors mapped from the data bits as follows: The first phasor φ1 undergoes a different bit mapping for each even or odd CCK symbol:
CCK symbol(d0, d1)evenodd(0,0)0π(0,1)π/23π/2(1,1)π0(1,0)3π/2π/2
The other phasors φ2, φ3 and φ4 define the basecode, and the QPSK encoding table in this case is for CCK-11:
(di,di+1)φ2, φ3, φ4(0,0)0(0,1)π/2(1,0)π(1,1)3π/2and for CCK-5.5 (CCK at 5.5 Mbps):
                              φ          2                =                                            d              2                        ·            π                    +                      π            2                                                                                    φ          3                =        0                                                                  φ          4                =                              d            3                    ·          π                    
Thus, φ2, φ3 and φ4 define 64 different CCK codes of 8 bits (with CCK-11) or 4 different CCK codes of 4 bits (with CCK-5.5), and the differential encoded phasor φ1 gives an extra phase rotation to the entire codeword since it is part of all chips in one codeword.
That is, to make 11 Mbps CCK modulation, the data is grouped into 2 bits and 6 bits. The 6 information bits are used to select one of 64 complex vectors of 8 chip length for the symbol and the other 2 bits DQPSK (Differential QPSK) modulate the entire symbol. In the 5.5 Mbps mode, the data is grouped into 4 bits nibbles where 2 of those bits select the spreading function out of the set of four while the remaining 2 bits QPSK modulate the symbol. The spreading sequence then DQPSK modulates the carrier by driving the I and Q modulators.
Referring now to FIG. 1, a block diagram of a conventional CCK modulator is illustrated that may be used in a transmitter. In the modulator, a multiplexer 100 receives scrambled data and multiplexes the input data either to the code selector 110 or to the modulator 120. The multiplexer 100 gets clocked at the symbol rate, i. e. at 1.375 MSps. The code selector 110 selects one of the complex codes that is to be fed to the modulator 120. This code represents the information bits that are spread over the basecode phasors φ2, φ3 and φ4. The bits that the modulator 120 receives from the multiplexer 100 are the two least significant (i. e. first incoming) bits d0, d1 that are used to QPSK (Quadrature Phase Shift Keying) modulate the codeword. The outputs of the modulator 120 are respective I and Q signals.
On the receiver side, a conventional CCK demodulator as shown in FIG. 2 may be used that decodes the received CCK codes using a fast Walsh transformation technique. This functionality is generally provided in the WLAN baseband processor, and it provides a channel matched filter 200 that supplies the filtered signals to a Walsh transformation block 210. It is to mentioned that a channel matched filter 200 as shown in FIG. 2 needs not necessarily be provided in a CCK demodulator. In the CCK-11 (or CCK-5.5) Walsh transformer, a bank 220 of 64 (or 4) correlators followed by a maximum detector 230 determines which code was transmitted giving the most significant 6 bits (or 2 bits) of the data word. The other 2 bits of the data word are determined from the QPSK phase of the symbol and fed to the sign detector 240. For this purpose, the sign detector 240 may comprise a differential demodulator, but it is again to be mentioned that a sign detector 240 as shown in FIG. 2 needs not necessarily be provided in a CCK demodulator.
Assuming R to be the received signal vector, and C* the conjugate code vector, the Walsh transformer 210 has to search for the maximum correlation of R over all codewords. For doing so, a high number of correlations R·C* need to be computed and compared, to detect the ML (maximum likelihood) codeword:
                              R          ·                      C            *                          =                ⁢                              exp            ⁡                          (                                                -                  j                                ⁢                                                                  ⁢                                  φ                  1                                            )                                ·                      [                                                                                1                    ×                                          exp                      ⁡                                              (                                                                              -                            j                                                    ⁢                                                                                                          ⁢                                                      φ                            2                                                                          )                                                              ×                                          exp                      ⁡                                              (                                                                              -                            j                                                    ⁢                                                                                                          ⁢                                                      φ                            3                                                                          )                                                              ×                                          exp                      ⁡                                              (                                                                              -                            j                                                    ⁢                                                                                                          ⁢                                                      φ                            4                                                                          )                                                                                                                                                              1                    ×                                          exp                      ⁡                                              (                                                                              -                            j                                                    ⁢                                                                                                          ⁢                                                      φ                            3                                                                          )                                                              ×                                          exp                      ⁡                                              (                                                                              -                            j                                                    ⁢                                                                                                          ⁢                                                      φ                            4                                                                          )                                                                                                                                                              1                    ×                                          exp                      ⁡                                              (                                                                              -                            j                                                    ⁢                                                                                                          ⁢                                                      φ                            2                                                                          )                                                              ×                                          exp                      ⁡                                              (                                                                              -                            j                                                    ⁢                                                                                                          ⁢                                                      φ                            4                                                                          )                                                                                                                                                              1                    ×                                          exp                      ⁡                                              (                                                                              -                            j                                                    ⁢                                                                                                          ⁢                                                      φ                            4                                                                          )                                                                                                                                                              1                    ×                                          exp                      ⁡                                              (                                                                              -                            j                                                    ⁢                                                                                                          ⁢                                                      φ                            2                                                                          )                                                              ×                                          exp                      ⁡                                              (                                                                              -                            j                                                    ⁢                                                                                                          ⁢                                                      φ                            3                                                                          )                                                                                                                                                              1                    ×                                          exp                      ⁡                                              (                                                                              -                            j                                                    ⁢                                                                                                          ⁢                                                      φ                            3                                                                          )                                                                                                                                                              1                    ×                                          exp                      ⁡                                              (                                                                              -                            j                                                    ⁢                                                                                                          ⁢                                                      φ                            2                                                                          )                                                                                                                                          1                                                      ]                    ·                      [                                                                                r                    0                                                                                                                    r                    1                                                                                                                    r                    2                                                                                                                    -                                          r                      3                                                                                                                                        r                    4                                                                                                                    r                    5                                                                                                                    -                                          r                      6                                                                                                                                        r                    7                                                                        ]                                                  =                ⁢                  R          ·                      exp            ⁡                          (                                                -                  j                                ⁢                                                                  ⁢                                  φ                  1                                            )                                ·                      C            B            *                              
This expression can be written as:R·C*=e−jφ1{[(r0e−jφ2+r1)e−jφ3+(r2e−jφ2−r3)]e−jφ4+[(r4e−jφ2+r5)e−jφ3+(−r6e−jφ2+r7)]}
Thus, each of the correlations that are to be computed may be implemented using the CCK correlator circuit shown in FIG. 3. That is, conventional CCK decoders require a correlator bank 220 that includes up to 64 CCK correlator circuits such as that shown in FIG. 3. This consumes a large amount of chip area and leads to substantial manufacturing costs.